// 购物车模块

import { addCartList, getCartList, deleteCartList, updateCart } from '@/api/user'
const cart = {
  namespaced: true,
  state: () => ({
    list: [] // 购物车列表
  }),
  // vuex计算属性  有些数据需要根据state中的数据经过一定的计算得到 getters
  getters: {
    // 总钱数  = 数组中的每一项的单价 * 数量 之和  reduce
    allPrice(state) {
      return state.list.reduce((a, c) => {
        return a + Number(c.price)
      }, 0)
    },
    // 总数
    allCount(state) {
      return state.list.reduce((a, c) => a + c.count, 0)
    },
    // 选中项count之和
    selectedCount(state) {
      return state.list.filter(item => item.selected).length
    },
    // 选中的物品
    orderData(state) {
      return state.list.filter(item => item.selected)
    },
    // 选中项的钱数之和
    selectedPrice(state) {
      return state.list.filter(item => item.selected).reduce((a, c) => a + Number(c.price), 0)
    },
    // 全选
    allSelected(state) {
      return state.list.every(item => item.selected === true)
    }
  },
  mutations: {
    setList(state, newList) {
      state.list = newList
    }
  },
  actions: {
    // 获取购物车
    async asyncGetCartList(ctx) {
      const res = await getCartList()
      // 调用mutation函数存入state
      ctx.commit('setList', res.data.data)
    },
    // 加入购物车
    async asyncInsertCart(ctx, skuId) {
      // 加入购物车
      const { data } = await addCartList(skuId)
      if (data.data === '请勿重复添加') {
        return
      } 
      // 去拉取生成的购物车列表
      const res = await getCartList()
      // 调用mutation函数存入state
      ctx.commit('setList', res.data.data)
    },
    // 删除购物车
    async updateList(ctx, data) {
      await deleteCartList(data)
      // 去拉取生成的购物车列表
      const res = await getCartList()
      ctx.commit('setList', res.data.data)
    },
    // 更新购物车的选择状态
    async asyncCheck(ctx, good) {
      // 更新接口
      await updateCart(good)
      // 重新拉取购物车列表
      const res = await getCartList()
      // 重新赋值给state
      ctx.commit('setList', res.data.data)
    }
    // 修改数量
    // async asyncChangeNum(ctx, good) {
    // 更新接口
    // await updateCart(good)
    // 重新拉取购物车列表
    // const res = await findCartList()
    // 重新赋值给state
    // ctx.commit('setList', res.data.result)
    // },
    // 全选
    // async allCheck(ctx, selected) {
    //   await checkAllCart({ selected, ids: ctx.state.list.map(item => item.skuId) })
    //   // 重新拉取购物车列表
    //   const res = await findCartList()
    //   // 重新赋值给state
    //   ctx.commit('setList', res.data.result)
    // }
  }
}

export default cart
